﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.ComponentModel;
using System.Text;
//librerias especiales para la BD
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.SqlTypes;

namespace CityGames
{
    public class CADLineaFactura
    {
        static private string cadConexion = System.Configuration.ConfigurationManager.ConnectionStrings["CityGames.Properties.Settings.BDCityGamesConnectionString"].ConnectionString;

        

        /// <summary>
        /// Función que ejecuta la consulta pasada por parámetro en Modo Desconectado y devuelve un DataSet con el resultado en una tabla denominada con el nombre especificado
        /// </summary>
        /// <param name="select">
        /// Sentencia Select SQL que se va a ejecutar</param>
        /// <param name="nombreTabla">
        /// Nombre que tendrá la tabla con los datos en el DataSet que devuelve la función</param>
        /// <returns>
        /// Devuelve un DataSet con el resultado de la consulta ejecutado en modo desconectado</returns>
        public DataSet ObtenerDatos(string select, string nombreTabla)
        {
            DataSet resultado = new DataSet();

            try
            {
                SqlConnection conexion = new SqlConnection(cadConexion);
                SqlDataAdapter da = new SqlDataAdapter(select, conexion);
                da.Fill(resultado, nombreTabla);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return resultado;
        }

        /*************************************************Funciones Ruben ***********************************************/


        /// <summary>
        /// Devuelve un DataSet con todas las lineas de factura
        /// </summary>       
        /// <returns>
        /// Un DataSet con las lineas de factura</returns>
        public DataSet ObtenerLineafactura()
        {
            string select = "SELECT numPedido, numLinea, descuento, numCopia FROM LineaFactura ORDER BY numPedido";
            DataSet lineas = new DataSet();

            try
            {
                lineas = ObtenerDatos(select, "LineaFactura");
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return lineas;
        }

        /// <summary>
        /// Función que crea una nueva linea de factura
        /// </summary>
        /// <param name="numPedido">
        /// El numero del pedido del que forma parte la linea</param>
        /// <param name="descuento">
        /// El descuento en € que lleva el producto</param>
        /// <returns>
        /// Devuelve un booleano que indica si se ha creado correctamente la linea.</returns>
        public bool NuevaLineaFactura(string numPedido, decimal descuento, string numCopia)
        {
            bool resultado = false;

            SqlConnection conexion = null;
            SqlTransaction tr = null;
            SqlCommand comandoSql = null;
            string insert = "";
            SqlParameter param = new SqlParameter("@descuento", descuento);

            try
            {
                insert += "INSERT INTO LineaFactura (NumPedido, Descuento,CodigoCopia)";
                insert += "VALUES        (" + numPedido + ", @descuento , " + numCopia + ")";

                conexion = new SqlConnection(cadConexion);
                conexion.Open();

                tr = conexion.BeginTransaction();

                comandoSql = new SqlCommand(insert, conexion);
                comandoSql.Parameters.Add(param);
                comandoSql.Transaction = tr;
                comandoSql.ExecuteNonQuery();

                tr.Commit();
                resultado = true;
            }
            catch (Exception ex)
            {
                tr.Rollback();
                throw ex;
            }
            finally
            {
                if (conexion != null)
                    conexion.Close();
            }

            return resultado;
        }

        /*************************************************Fin Funciones Ruben ***********************************************/
    }
}
